package com.aco.fatureapp.fragments;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Iterator;
import java.util.Locale;

import android.app.Dialog;
import android.app.Fragment;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.aco.fatureapp.FatureHomeActivity;
import com.aco.fatureapp.R;
import com.aco.fatureapp.model.Dashboard;
import com.aco.fatureapp.model.Roteiro;
import com.aco.fatureapp.model.RoteiroConfig;
import com.aco.fatureapp.service.SrvImportRoute;
import com.aco.fatureapp.service.SrvMetering;
import com.aco.fatureapp.utilitary.DataUtils;
import com.aco.fatureapp.utilitary.Utils;

public class MenuFragment extends Fragment {

	/*
	 * Resumo
	 */
	private TextView mTxtDataPrimeiraLeitura;
	private TextView mQtdComOcorrencia;
	private TextView mTxtCompetencia;
	private TextView mTxtNumRoteiro;
	private TextView mQtdConcluidas;
	private TextView mQtdPendentes;
	private TextView mQtdRetidas;

	private Roteiro mRoteiro;

	/*
	 * (non-Javadoc)
	 * 
	 * @see
	 * android.support.v4.app.Fragment#onCreateView(android.view.LayoutInflater,
	 * android.view.ViewGroup, android.os.Bundle)
	 */
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container,
			Bundle savedInstanceState) {

		final View view = inflater.inflate(R.layout.fragment_home_menu,
				container, false);

		((Button) view.findViewById(R.id.opcLeitura))
				.setOnClickListener(mnuLeitura());

		((Button) view.findViewById(R.id.opcImportarRoteiro))
				.setOnClickListener(mnuImportarRoteiro());

		((Button) view.findViewById(R.id.opcExportarRoteiro))
				.setOnClickListener(mnuExportarRoteiro());

		((Button) view.findViewById(R.id.opcEncerrarRoteiro))
				.setOnClickListener(mnuEncerrarRoteiro());

		mTxtDataPrimeiraLeitura = (TextView) view
				.findViewById(R.id.txtDataPrimeiraLeitura);

		mQtdComOcorrencia = (TextView) view.findViewById(R.id.qtdComOcorrencia);

		mTxtCompetencia = (TextView) view.findViewById(R.id.txtCompetencia);

		mTxtNumRoteiro = (TextView) view.findViewById(R.id.txtNumRoteiro);

		mQtdConcluidas = (TextView) view.findViewById(R.id.qtdConcluidas);

		mQtdPendentes = (TextView) view.findViewById(R.id.qtdPendentes);

		mQtdRetidas = (TextView) view.findViewById(R.id.qtdRetidas);

		return view;
	}

	/*
	 * 
	 * Aqui são preenchidas as informações de resumo.
	 * 
	 * @see android.app.Fragment#onResume()
	 */
	@Override
	public void onResume() {

		try {
			Iterator<Roteiro> lstRoteiro = Roteiro.findAll(Roteiro.class);

			if (lstRoteiro != null && lstRoteiro.hasNext()) {

				this.mRoteiro = lstRoteiro.next();
				((FatureHomeActivity) getActivity()).setRoteiro(mRoteiro);

				mTxtNumRoteiro.setText(mRoteiro.getNumero().toString());

				mTxtCompetencia.setText(DataUtils.formatarCompetencia(mRoteiro
						.getCompetencia()));

				mTxtDataPrimeiraLeitura.setText("-");
				mQtdComOcorrencia.setText("-");
				mQtdConcluidas.setText("-");
				mQtdPendentes.setText("-");
				mQtdRetidas.setText("-");

				Dashboard dashboard = new SrvMetering().getResumo();
				if (dashboard != null) {
					if (dashboard.dataPrimeiraLeitura != null
							&& dashboard.dataPrimeiraLeitura > 0) {

						Calendar calendar = Calendar.getInstance();
						calendar.setTimeInMillis(dashboard.dataPrimeiraLeitura);

						SimpleDateFormat dateFormat = new SimpleDateFormat(
								"dd/MM/yyyy HH:mm", new Locale("pt", "BR"));

						mTxtDataPrimeiraLeitura.setText(dateFormat
								.format(calendar.getTime()));
					}

					mQtdComOcorrencia.setText(Utils.formartZeroLeft(
							dashboard.qtdComOcorrencia, 3));

					mQtdConcluidas.setText(Utils.formartZeroLeft(
							dashboard.qtdConcluidas, 3));

					mQtdPendentes.setText(Utils.formartZeroLeft(
							dashboard.qtdPendentes, 3));

					mQtdRetidas.setText(Utils.formartZeroLeft(
							dashboard.qtdRetidas, 3));
				}

			}
		}
		catch (Exception e) {
			// TODO: handle exception
		}

		super.onResume();
	}

	private OnClickListener mnuEncerrarRoteiro() {
		return new OnClickListener() {
			@Override
			public void onClick(final View v) {
				RoteiroConfig config = new SrvImportRoute().getRoteiroConfig();

				if (mRoteiro != null && config != null && !config.isEncerrado()) {
					Intent intent = new Intent("IF_CLOSE_ROUTE");
					intent.putExtra(Roteiro.getTableName(Roteiro.class),
							mRoteiro);

					startActivity(intent);
				}
				else {
					Utils.alert(
							getActivity(),
							"Não há roteiro disponível ou o mesmo está encerrado, deseja importar agora?",
							new Dialog.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									startActivity(new Intent("IF_IMPORT"));
								}
							}, null);
				}
			}
		};
	}

	private OnClickListener mnuExportarRoteiro() {
		return new OnClickListener() {
			@Override
			public void onClick(final View v) {
				RoteiroConfig config = new SrvImportRoute().getRoteiroConfig();

				if (mRoteiro != null && config != null && !config.isEncerrado()) {
					Intent intent = new Intent("IF_EXPORT");
					intent.putExtra(Roteiro.getTableName(Roteiro.class),
							mRoteiro);

					startActivity(intent);
				}
				else {
					Utils.alert(
							getActivity(),
							"Não há roteiro disponível ou o mesmo está encerrado, deseja importar agora?",
							new Dialog.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									startActivity(new Intent("IF_IMPORT"));
								}
							}, null);
				}
			}
		};
	}

	private OnClickListener mnuImportarRoteiro() {
		return new OnClickListener() {
			@Override
			public void onClick(final View v) {
				startActivity(new Intent("IF_IMPORT"));
			}
		};
	}

	private OnClickListener mnuLeitura() {
		return new OnClickListener() {
			@Override
			public void onClick(final View v) {
				if (mRoteiro != null) {
					Intent intent = new Intent("IF_METERING");
					intent.putExtra(Roteiro.getTableName(Roteiro.class),
							mRoteiro);

					startActivity(intent);
				}
				else {
					Utils.alert(
							getActivity(),
							"Não há roteiro disponível, deseja importar agora?",
							new Dialog.OnClickListener() {

								@Override
								public void onClick(DialogInterface dialog,
										int which) {
									startActivity(new Intent("IF_IMPORT"));
								}
							}, null);
				}
			}
		};
	}
}